#ifndef LISTAIMP_H
#define LISTAIMP_H

#include "Lista.h"
#include "Puntero.h"
template <class T>
class NodoLista {
	public:
		T dato;

		NodoLista<T> *sig;

		NodoLista(const T &e, NodoLista<T> *s) : dato(e),  sig(s) {}
		NodoLista(const NodoLista<T> &n) : dato(n.dato), sig(n.sig)  {}
		NodoLista() : dato(NULL), sig(NULL){}
		NodoLista<T> &operator=(const NodoLista<T> &n) { dato = n.dato; sig = n.sig;}
		bool &operator==(const NodoLista<T> &n) { dato == n.dato; sig ==n.sig;}
		//NodoLista<T> &operator&&(const NodoLista<T> &n) { dato && n.dato; sig &&n.sig;}

		virtual ~NodoLista() {}
};
template<class T>
class ListaImp
{
public:
	ListaImp();
	~ListaImp();
	ListaImp(ListaImp<T>& l);
	ListaImp(Puntero<ListaImp<T>> &l);
	 void Agregar(T &e) ;
	 void AgregarFinal(T &e) ;
	 void AgregarPpio(T &e);
	 void Borrar(T &t) ;
	 void Vaciar() ;
	 bool EsVacia() ;
	 unsigned int Largo() ;
	bool EsMiembro(T &t);
	 Puntero<Iterador<T>> ObtenerIterador() const ;
	void mostrar(int);



public:
		NodoLista<T>* ppio;
		NodoLista<T>* fin;
		int largo;
};
#include "ListaImp.cpp"
#endif